package cn.hyp.bantang.module.finance.service.basezcfz;

import cn.hyp.bantang.framework.common.pojo.PageResult;
import cn.hyp.bantang.framework.common.util.object.BeanUtils;
import cn.hyp.bantang.module.finance.controller.admin.basezcfz.vo.BaseZcfzPageReqVO;
import cn.hyp.bantang.module.finance.controller.admin.basezcfz.vo.BaseZcfzSaveReqVO;
import cn.hyp.bantang.module.finance.dal.dataobject.basezcfz.BaseZcfzDO;
import cn.hyp.bantang.module.finance.dal.mysql.basezcfz.BaseZcfzMapper;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;

import javax.annotation.*;
import static cn.hyp.bantang.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.hyp.bantang.module.finance.enums.ErrorCodeConstants.*;

/**
 * 个股报告期资产负债 Service 实现类
 *
 * @author 半唐
 */
@Service
@Validated
public class BaseZcfzServiceImpl implements BaseZcfzService {

    @Resource
    private BaseZcfzMapper baseZcfzMapper;

    @Override
    public Long createBaseZcfz(BaseZcfzSaveReqVO createReqVO) {
        // 插入
        BaseZcfzDO baseZcfz = BeanUtils.toBean(createReqVO, BaseZcfzDO.class);
        baseZcfzMapper.insert(baseZcfz);
        // 返回
        return baseZcfz.getId();
    }

    @Override
    public void updateBaseZcfz(BaseZcfzSaveReqVO updateReqVO) {
        // 校验存在
        validateBaseZcfzExists(updateReqVO.getId());
        // 更新
        BaseZcfzDO updateObj = BeanUtils.toBean(updateReqVO, BaseZcfzDO.class);
        baseZcfzMapper.updateById(updateObj);
    }

    @Override
    public void deleteBaseZcfz(Long id) {
        // 校验存在
        validateBaseZcfzExists(id);
        // 删除
        baseZcfzMapper.deleteById(id);
    }

    private void validateBaseZcfzExists(Long id) {
        if (baseZcfzMapper.selectById(id) == null) {
            throw exception(BASE_ZCFZ_NOT_EXISTS);
        }
    }

    @Override
    public BaseZcfzDO getBaseZcfz(Long id) {
        return baseZcfzMapper.selectById(id);
    }

    @Override
    public PageResult<BaseZcfzDO> getBaseZcfzPage(BaseZcfzPageReqVO pageReqVO) {
        return baseZcfzMapper.selectPage(pageReqVO);
    }

}